package logica_de_presentacion;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;

import logica_de_negocio.excepAnadirDupli;
import logica_de_negocio.gestorImagen;

public class FormularioAnadirModificarImagen extends JInternalFrame implements
		ActionListener, InternalFrameListener {

	private static final long serialVersionUID = 1L;
	protected JButton salir, anadir;
	private FileDialogProgram fdp;

	private VerImagen vi;
	private String path;
	private MenuInicial clasePadre;

	/**
	 * Ventana para anadir imagen
	 */

	public FormularioAnadirModificarImagen(MenuInicial clasePadre) {

		super("Anadir imagen", true, true, true, true);

		this.setVisible(true);
		this.clasePadre = clasePadre;
		this.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
		{

			JPanel textos = new JPanel(new GridLayout(1, 2));// FILAS,Columnas
			JPanel Botones = new JPanel();
			this.getContentPane().setLayout(new FlowLayout());
			// TIPO DE ORDENACION

			// TEXTO
			JLabel l = new JLabel("Si desea anadir una imagen pulse el boton");
			textos.add(l);

			this.getContentPane().add(textos, "North");

			// BOTONES
			ImageIcon tick = createImageIcon("/logica_de_presentacion/imagenes/TICK.gif");
			anadir = new JButton("Anadir", tick);
			anadir.setVerticalTextPosition(AbstractButton.CENTER);
			anadir.setHorizontalTextPosition(AbstractButton.LEADING);
			// aka LEFT, for left-to-right locales
			anadir.setToolTipText("Anadir la imagen en la base de datos");
			Botones.add(anadir);
			anadir.addActionListener(this);

			ImageIcon cancelar = createImageIcon("/logica_de_presentacion/imagenes/CANCELAR.gif");
			salir = new JButton("Cancelar", cancelar);
			salir.setVerticalTextPosition(AbstractButton.CENTER);
			salir.setHorizontalTextPosition(AbstractButton.LEADING);
			// aka LEFT, for left-to-right locales

			Botones.add(salir);
			salir.addActionListener(this);

			// ANADIMOS AL PANEL PRINCIPAL
			this.getContentPane().add(Botones, "South");
			// TAMANO JUSTO
			this.pack();
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {

		JButton botonPulsa = (JButton) e.getSource();

		if (botonPulsa == salir) {

			int valor = JOptionPane.showConfirmDialog(this, "ESTA SEGURO ?");
			// YES=0, NO=1,Cancel =2
			if (valor == 0) {
				this.dispose();
			}
		} else {// MODIFICAR; o ANADIR

			if (botonPulsa == anadir) {

				// ANADIR
				this.setVisible(false);
				fdp = new FileDialogProgram();
				fdp.addInternalFrameListener(this);
				fdp.toFront();
				clasePadre.add(fdp);

			}
		}
	}

	/**
	 * Returns an ImageIcon, or null if the path was invalid.
	 * 
	 * @param path
	 * @return la imagen deseada.
	 * 
	 * */
	protected static ImageIcon createImageIcon(String path) {
		java.net.URL imgURL = Button.class.getResource(path);
		if (imgURL != null) {
			return new ImageIcon(imgURL);
		} else {
			System.err.println("Couldn't find file: " + path);
			return null;
		}
	}

	@Override
	public void internalFrameOpened(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameClosing(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameClosed(InternalFrameEvent e) {
		if (e.getSource() == fdp) {
			path = fdp.getPath();
			if (path != null) {
				vi = new VerImagen();
				vi.addInternalFrameListener(this);
				vi.toFront();
				try {
					vi.cargarImagen(path);
					clasePadre.add(vi);
				} catch (IOException e1) {
					JOptionPane
							.showMessageDialog(null,
									"Esta imagen no es de un formato correcto, solo jpg");
				}
			}
		}
		if (e.getSource() == vi) {
			if (vi.getAdd()) {
				gestorImagen gi = new gestorImagen();
				try {
					gi.anadirImagen(new File(path));
				} catch (ClassNotFoundException e1) {
					JOptionPane.showMessageDialog(null,
							"No existe la base de datos.");
				} catch (IOException e1) {
					// Aunque antes se revisa pero por si se altera en el
					// transcurso.
					JOptionPane
							.showMessageDialog(null,
									"Esta imagen no es de un formato correcto, solo jpg");
				} catch (excepAnadirDupli e1) {
				}
				this.dispose();
			}
		}
	}

	@Override
	public void internalFrameIconified(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameDeiconified(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameActivated(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameDeactivated(InternalFrameEvent e) {
	}
}
